博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于SpingMVC实现文件下载你所不知道的
阅读量:7241 次
发布时间:2019-06-29

本文共 1882 字,大约阅读时间需要 6 分钟。

文件的上传下载一般在项目中还是非常实用的,此处专门整理一下文件的下载,至于文件的上传实现将在后续中补上。文件的下载多用于模板文件的下载,这在项目中用的还是挺多的。今天用到了就整理出来了,以供搬运工们借鉴并使用,已验证无误。

(1)     前台实现

前台实现非常简单,不像文件上传那样复杂,只要给出一个超链接,链接到后台处理的方法,并且需要将文件名传入Controller。

(2)     后台处理

后台的Controller就主要处理这样几个问题:

①根据文件名,找到模板文件

②设置响应的形式、文件头、编码

③通过流的形式读取模板文件内容并将之写入输出流

④关闭输入输出流

(3)     下面我们根据前台后台的实现思路来具体看一下实现代码:

①前台:

  ②后台:

@RequestMapping(value = "/downloadTemplate",method = RequestMethod.GET)    public String downloadAbilityTemplate(String fileName,HttpServletRequest request,HttpServletResponse response){        response.setCharacterEncoding("utf-8");//设置编码        response.setContentType("multipart/form-data");//设置类型        response.setHeader("Content-Disposition", "attachment;fileName="+ fileName);                                       //设置响应头        try {        String filePath = Config.getValue("path");//获取配置文件中模板文件所在目录        String path = request.getSession().getServletContext().getRealPath("/")+filePath;//获取模板文件的相对目录        InputStream inputStream = new FileInputStream(new File(path+ File.separator + fileName));        OutputStream os = response.getOutputStream();        byte[] b = new byte[2048];        int length;        while ((length = inputStream.read(b)) > 0) {                os.write(b, 0, length);        }//边读模板文件边写入输出流        os.close();        inputStream.close();//关流        } catch (FileNotFoundException e) {                e.printStackTrace();        } catch (IOException e) {                e.printStackTrace();        }        return null;                //注意此时return null}

  

(4)     注意点:

①返回模型层应该是return null,否则出现如下错误:

java+getOutputStream() has already been called for this response

②模板文件的位置可以根据需要存放,只要在后台能获取到此文件的全路径就行

放在class目录下获取是:

//获取classes所在路径

String path = Thread.currentThread().getContextClassLoader().getResource("").getPath();

//获取WebRoot目录:

String path = request.getSession().getServletContext().getRealPath("/")

行走在设计师的路上!

 

转载地址:http://pnybm.baihongyu.com/

你可能感兴趣的文章
听说iPhone X到货了,识别体验是不是科技感爆棚?
查看>>
windows server2012中创建密码重设盘
查看>>
openstack-icehouse部署中遇到的一些故障(小笔记)
查看>>
redhat 替换 yum
查看>>
Google决定用gLinux取代Goobuntu Linux操作系统
查看>>
《将博客搬至CSDN》
查看>>
TCP/IP和OSI参考模型
查看>>
python日志管理模块logging
查看>>
Android用Intent和Bundle传list
查看>>
MySQL count(*) 优化
查看>>
西城110/linux高级作业(12.26)
查看>>
负载产品性能测试——新建测试
查看>>
mongo学习记录
查看>>
node.js搭建本地服务器的代码分享
查看>>
Flask + mod_wsgi + Apache on Windows 部署成功
查看>>
python&mnist笔记
查看>>
redis学习(二)
查看>>
java运算符 与(&)、非(~)、或(|)、异或(^)
查看>>
jdbc的小warning
查看>>
ReactOS:基于Windows的开源操作系统
查看>>